import moment from 'moment'

/*
* 获取相关时间
*/
/*
*  获取当前（年、季度、月、周、日、天、时、分、秒）的起止时间
*  params: year quarter month week day minute second
*/ 
function getCurTimePeriod(unit = 'week', format = 'YYYY-MM-DD HH:mm:ss'){
  const startTime = moment().startOf(unit).format(format);
  const endTime = moment().endOf(unit).format(format);
  return {startTime,endTime};
}

// 获取当前时间
function getNowTime(format = 'YYYY-MM-DD HH:mm:ss'){
  const newTime = moment().format(format);
  return newTime
}

/*
*  获取当前时间加上某个时间段的时间
*  params: years  quarters months weeks days hours minutes seconds milliseconds
*/ 
function getNowAddTime(x = 1,unit = 'days',format = 'YYYY-MM-DD HH:mm:ss'){
  const newTime = moment().add(x, unit).format(format); 
  return newTime
}

/*
*  获取指定时间加上某个时间段的时间
*  params: years  quarters months weeks days hours minutes seconds milliseconds
*/ 
function getTimeAddTime(time,x = 1,unit = 'days',format = 'YYYY-MM-DD HH:mm:ss'){
  const newTime = moment(time).add(x, unit).format(format); 
  return newTime
}

/*
*  获取当前时间减去某个时间段的时间
*  params: years  quarters months weeks days hours minutes seconds milliseconds
*/ 
function getNowSubtractTime(x = 1,unit = 'days',format = 'YYYY-MM-DD HH:mm:ss'){
  const newTime = moment().subtract(x, unit).format(format); 
  return newTime
}

/*
*  获取指定时间减去某个时间段的时间
*  params: years  quarters months weeks days hours minutes seconds milliseconds
*/ 
function getTimeSubtractTime(time, x = 1, unit = 'days', format = 'YYYY-MM-DD HH:mm:ss'){
  const newTime = moment(time).subtract(x, unit).format(format); 
  return newTime
}
/*
* 日期时间格式化
*/

/*
*  UTC & GMT  转 指定日期格式
*  2020-03-07T16:00:00.000Z 转 2020-03-08 00:00:00
*  Sun Mar 08 2020 00:00:00 GMT+0800 (中国标准时间) 转 2020-03-08 00:00:00
*/ 
function formatTime(time, format = 'YYYY-MM-DD HH:mm:ss'){
  const newTime = moment(time).format(format);
  return newTime
}

/*
*  本地时间 转 UTC(世界标准时间)
*  2020-03-08 00:00:00 转 2020-03-07T16:00:00.000Z
*/
function formatlocalTimeToUTC(time){
  // 方法1：可能遇到在 iOS 上无法渲染组件的问题，请确认在创建 Date 对象时没有使用new Date('2020-01-01')这样的写法，iOS 不支持以中划线分隔的日期格式，正确写法是new Date('2020/01/01')。
  // const newTime = new Date(time).toISOString();
  // 方法2：（推荐）
  const newTime = moment(time).utc().format(); 
  return newTime;
}

/*
*  本地时间 转 GMT(格林威治时间)
*  2020-03-08 00:00:00 转 Sun Mar 08 2020 00:00:00 GMT+0800 (中国标准时间)
*/
function formatlocalTimeToGMT(time){
  const newTime = new Date(time)
  return newTime;
}

/**
 * 本地时间 转 1970-1-1 00:00:00 UTC 到日期对象的秒数
 * 2021-01-09 16:26:24 转 1610180784
 * 注意：转化出来的时间单位为秒（s）,并非毫秒（ms）
*/
function formatlocalTimeToSecond(time){
  const newTime = moment(time).unix(); 
  return newTime;   
}

/**
 * 本地时间 转 1970-1-1 00:00:00 UTC 到日期对象的毫秒数
 * 2021-01-09 16:26:24 转 1610180784000
*/
function formatlocalTimeToMs(time){
  const newTime = moment(time).valueOf(); 
  return newTime;   
}

/**
 * 1970-1-1 00:00:00 UTC 到日期对象的毫秒数 转 本地时间
 * 1610180784000 转 2021-01-09 16:26:24
*/
function formatMsTolocalTime(time, format = 'YYYY-MM-DD HH:mm:ss'){
  const newTime = moment(time).format(format);  
  return newTime;
}

/**
 * 判断 time1 是否在 time2 之前
 * 
*/
function judgeTimeIsBefore(time1,time2){
  const result = moment(time1).isBefore(time2);
  return result;
} 

/**
 * 计算两个时间差
 * unit: years  quarters months weeks days hours minutes seconds milliseconds；
 * isFloat: false 返回整数， true 返回浮点数；
*/
function calculateTimeDiff(time1, time2, unit = 'hours',isFloat = false){
  const result = moment(time1).diff(moment(time2),unit,isFloat);
  return result;
} 

export{
  getCurTimePeriod,
  getNowTime,
  getNowAddTime,
  getTimeAddTime,
  getNowSubtractTime,
  getTimeSubtractTime,
  formatTime,
  formatlocalTimeToUTC,
  formatlocalTimeToGMT,
  formatMsTolocalTime,
  formatlocalTimeToSecond,
  formatlocalTimeToMs,
  judgeTimeIsBefore,
  calculateTimeDiff,
}